package com.lanhao.aot.mq.rocketmq.config;

import com.aliyun.openservices.ons.api.*;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import java.util.Properties;

/**
 * RocketMQ配置
 */
@Configuration
public class RocketMQConfig {

	public static final String accessKey = "LTAItw6nqcPILaPI";
	public static final String secretKey = "rdGiTs4WssbDiUSjbwzX0BEIP3ptot";
	public static final String namesrvAddr = "http://MQ_INST_1202966359367106_BbzHW814.mq-internet-access.mq-internet.aliyuncs.com:80";
	public static final String groupId = "GID_SG_HOTCOIN_VALIDATE_TEST";
	public static final String topic = "SG_HOTCOIN_USER_ACTION_TEST";


	/**
	 * 生产者配置
	 * 
	 * @return
	 */
	@Bean
	public Producer producer() {
		Properties properties = new Properties();
		// 鉴权用 AccessKey，在阿里云服务器管理控制台创建
		properties.put(PropertyKeyConst.AccessKey, accessKey);
		// 鉴权用 SecretKey，在阿里云服务器管理控制台创建
		properties.put(PropertyKeyConst.SecretKey, secretKey);
		// 设置 TCP 接入域名，进入控制台的实例管理页面，在页面上方选择实例后，在实例信息中的“获取接入点信息”区域查看
		properties.put(PropertyKeyConst.NAMESRV_ADDR, namesrvAddr);
		// 通过 PropertyKeyConst.EXACTLYONCE_DELIVERY 开启 exactly-once
		// 投递语义(保证拥有多个消费者时消息只被消费一次)
		properties.put(PropertyKeyConst.EXACTLYONCE_DELIVERY, "true");
		Producer producer = ONSFactory.createProducer(properties);
		// 在发送消息前，必须调用 start 方法来启动 Producer，只需调用一次即可
		producer.start();

		return producer;
	}

	/**
	 * 消费者1配置
	 * 
	 * @return
	 */
	@Bean
	public Consumer consumer1() {
		Properties properties = new Properties();
		// 您在控制台创建的 Group ID
		properties.put(PropertyKeyConst.GROUP_ID, groupId);
		// 鉴权用 AccessKey，在阿里云服务器管理控制台创建
		properties.put(PropertyKeyConst.AccessKey, accessKey);
		// 鉴权用 SecretKey，在阿里云服务器管理控制台创建
		properties.put(PropertyKeyConst.SecretKey, secretKey);
		// 设置 TCP 接入域名，进入控制台的实例管理页面，在页面上方选择实例后，在实例信息中的“获取接入点信息”区域查看
		properties.put(PropertyKeyConst.NAMESRV_ADDR, namesrvAddr);
		Consumer consumer = ONSFactory.createConsumer(properties);
		// 创建消息监听和消息处理逻辑
		consumer.subscribe(topic, "", new MessageListener() {
			@Override
			public Action consume(Message message, ConsumeContext context) {
				System.out.println("Receive1: " + new String(message.getBody()) + " " + message.getMsgID());
				return Action.CommitMessage;
			}
		});
		// 启动监听
		consumer.start();

		return consumer;
	}

	/**
	 * 消费者2配置
	 * 
	 * @return
	 */
	@Bean
	public Consumer consumer2() {
		Properties properties = new Properties();
		// 您在控制台创建的 Group ID
		properties.put(PropertyKeyConst.GROUP_ID, groupId);
		// 鉴权用 AccessKey，在阿里云服务器管理控制台创建
		properties.put(PropertyKeyConst.AccessKey, accessKey);
		// 鉴权用 SecretKey，在阿里云服务器管理控制台创建
		properties.put(PropertyKeyConst.SecretKey, secretKey);
		// 设置 TCP 接入域名，进入控制台的实例管理页面，在页面上方选择实例后，在实例信息中的“获取接入点信息”区域查看
		properties.put(PropertyKeyConst.NAMESRV_ADDR, namesrvAddr);
		Consumer consumer = ONSFactory.createConsumer(properties);
		// 创建消息监听和消息处理逻辑
		consumer.subscribe(topic, "", new MessageListener() {
			@Override
			public Action consume(Message message, ConsumeContext context) {
				System.out.println("Receive2: " + new String(message.getBody()) + " " + message.getMsgID());
				return Action.CommitMessage;
			}
		});
		// 启动监听
		consumer.start();

		return consumer;
	}
}